home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / rjs.lha / RJS / Transport / src / DECnetAddress.C next >
C/C++ Source or Header  |  1991-06-14  |  3KB  |  148 lines

  1.  
  2. #include "Transport.h"
  3.  
  4. #include <stdio.h>
  5. #include <osfcn.h>
  6. #include <libc.h>
  7. #include <string.h>
  8.  
  9. extern "C" {
  10.     int dnet_conn(
  11.         const char *node, 
  12.         const char *obj,
  13.         int type,
  14.         u_char *opt_out,
  15.         int opt_outl,
  16.         u_char *opt_in,
  17.         int *opt_inl
  18.     );
  19.     struct dn_naddr *dnet_addr(const char *cp);
  20.     struct nodeent  *getnodebyname(const char *node);
  21.     struct objectent *getobjectbyname(const char *name);
  22.     const char *dnet_ntoa(struct dn_naddr *add);
  23.     const char *dnet_otoa(struct sockaddr_dn *dn);
  24.  
  25. }
  26.  
  27. const RJS_Status RJS_DECnetAddress::UnKnownObject("unknown object");
  28.  
  29. inline int object_number(const char *name)
  30. {
  31.     struct objectent *obj=getobjectbyname(name);
  32.     if (obj) return obj->o_objnum;
  33.     else return -1;
  34. }
  35.  
  36. const char *RJS_DECnetAddress::hostname() const { 
  37.     return dnet_ntoa(&address.sdn_add);
  38. }
  39.  
  40. const char *RJS_DECnetAddress::objname() const { 
  41.     return dnet_otoa(&address);
  42. }
  43.  
  44. void RJS_DECnetAddress::dump()
  45. {
  46.   cout << "DECnetAddress { " << endl;
  47.   cout << "    sdn_family : " << address.sdn_family << endl;
  48.   cout << "    sdn_flags  : " << address.sdn_flags << endl;
  49.   cout << "    sdn_objnum : " << address.sdn_objnum << endl;
  50.   cout << "    sdn_objnamel : " << address.sdn_objnamel << endl;
  51.   cout << "    sdn_objname : " << address.sdn_objname << endl;
  52.   cout << "}" << endl;
  53. }
  54.  
  55. RJS_DECnetAddress::RJS_DECnetAddress()
  56. {
  57.     ss_set(NoHostGiven);
  58. }
  59.  
  60. RJS_DECnetAddress::RJS_DECnetAddress(int obj)
  61. {
  62.     lookup(obj);
  63. }
  64.  
  65.  
  66. RJS_DECnetAddress::RJS_DECnetAddress(const char *obj)
  67. {
  68.     lookup(obj);
  69. }
  70.  
  71. int RJS_DECnetAddress::lookup(int obj)
  72. {
  73.         bzero((char *) &address, sizeof(address));
  74.         address.sdn_family = RJS_Socket::AfDECnet;
  75.         address.sdn_objnum = obj;
  76.     ss_set(HostFound);
  77.     return 1;
  78. }
  79.  
  80.  
  81. int RJS_DECnetAddress::lookup(const char *obj)
  82. {
  83.         bzero((char *) &address, sizeof(address));
  84.         address.sdn_family = RJS_Socket::AfDECnet;
  85.         address.sdn_objnum = object_number(obj);
  86.     if (address.sdn_objnum == -1) ss_set(UnKnownObject);
  87.     else ss_set(HostFound);
  88.     return 1;
  89. }
  90.  
  91. RJS_DECnetAddress::RJS_DECnetAddress(const char *node,int obj)
  92. {
  93.     lookup(node,obj);
  94. }
  95.  
  96. RJS_DECnetAddress::RJS_DECnetAddress(const char *node,const char *obj)
  97. {
  98.     lookup(node,obj);
  99. }
  100.  
  101. int RJS_DECnetAddress::lookup(const char *node,int obj)
  102. {
  103.     struct nodeent *nodep;
  104.     struct dn_naddr *node_addr;
  105.  
  106.          bzero((char *) &address , sizeof(address));
  107.          address.sdn_family = RJS_Socket::AfDECnet;
  108.      address.sdn_objnum = obj;
  109.      if ( (node_addr = dnet_addr(node)) == NULL) {
  110.         if ((nodep=getnodebyname(node))==NULL) {
  111.             ss_set(UnknownHost);
  112.           return 0;
  113.         } else {
  114.             bcopy(nodep->n_addr,address.sdn_nodeaddr,
  115.                 nodep->n_length);
  116.             address.sdn_nodeaddrl = nodep->n_length;
  117.         }
  118.     } else address.sdn_add = *node_addr;
  119.  
  120.     ss_set(HostFound);
  121.     return 1;
  122. }
  123.  
  124. int RJS_DECnetAddress::lookup(const char *node,const char *obj)
  125. {
  126.     struct nodeent *nodep;
  127.     struct dn_naddr *node_addr;
  128.  
  129.          bzero((char *) &address , sizeof(address));
  130.          address.sdn_family = RJS_Socket::AfDECnet;
  131.      address.sdn_objnum = object_number(obj);
  132.      if ( (node_addr = dnet_addr(node)) == NULL) {
  133.         if ((nodep=getnodebyname(node))==NULL) {
  134.             ss_set(UnknownHost);
  135.           return 0;
  136.         } else {
  137.             bcopy(nodep->n_addr,address.sdn_nodeaddr,
  138.                 nodep->n_length);
  139.             address.sdn_nodeaddrl = nodep->n_length;
  140.         }
  141.     } else address.sdn_add = *node_addr;
  142.  
  143.     if (address.sdn_objnum == -1) ss_set(UnKnownObject);
  144.     else ss_set(HostFound);
  145.     return 1;
  146. }
  147.  
  148.